package eventos.barraMenu;

import java.awt.event.MouseAdapter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.swing.JOptionPane;

import xml.XMLManager;

import controlador.ContenedorDeErrores;
import controlador.ControladorEditor;

public abstract class EventoValidar extends MouseAdapter {

	private ContenedorDeErrores errores;

	public EventoValidar()
	{
		super();
		this.errores = new ContenedorDeErrores();
	}
	
	protected void validar(String nombre)
	{
		String nombreDeArchivo = crearNombreArchivo(nombre);
		if (errores.hayErrores()) 
			JOptionPane.showMessageDialog(ControladorEditor.getInstancia().getVentanaPrograma(), "El diagrama tuvo errores. Ver el archivo de salida " + System.getProperty("line.separator") + nombreDeArchivo + System.getProperty("line.separator") + "con la descripción de los errores", "Diagrama con errores", JOptionPane.ERROR_MESSAGE);
		else
			JOptionPane.showMessageDialog(ControladorEditor.getInstancia().getVentanaPrograma(), "El diagrama no contiene errores.", "Diagrama válido", JOptionPane.INFORMATION_MESSAGE);

		this.escribirEnArchivo(nombreDeArchivo);
		this.errores.limpiarErrores();		
	}
	
	private void escribirEnArchivo(String nombreArchivo) 
	{
		try
		{
			this.borrarArchivo(nombreArchivo);
			
			File archivo = new File(nombreArchivo);
			FileWriter escribir = new FileWriter(archivo,true);

			for ( String error: this.errores.getErrores() )
				escribir.write(error + "\n");
			
			escribir.close();
		}
		catch(IOException error) {
			JOptionPane.showMessageDialog(ControladorEditor.getInstancia().getVentanaPrograma(), "Error al escribir en el archivo " + nombreArchivo, "",JOptionPane.ERROR_MESSAGE);
		}		
	}
	
	private void borrarArchivo(String nombreArchivo)
	{
		File archivo = new File(nombreArchivo);
		archivo.delete();		
	}
	
	private String crearNombreArchivo(String nombrePpal)
	{
		Calendar calendario = new GregorianCalendar();
		String directorio = XMLManager.getInstance().getPath();
		String fecha = Integer.toString(calendario.get(Calendar.YEAR));
		
		if (calendario.get (Calendar.MONTH) < 10)
			fecha += "0";
		
		fecha += Integer.toString(calendario.get (Calendar.MONTH));
 
		if (calendario.get (Calendar.DAY_OF_MONTH) < 10)
			fecha += "0";
		
		fecha += Integer.toString(calendario.get (Calendar.DAY_OF_MONTH));

		return directorio + fecha + nombrePpal + ".txt";
	}
	
	protected ContenedorDeErrores getErrores() {
		return this.errores;
	}
}
